function axios({ method, url, params, data }) {
  // 转换大写
  method = method.toUpperCase();
  // 返回值
  return new Promise((resolve, reject) => {
    // 1 创建ajax对象
    const xhr = new XMLHttpRequest();

    // 2 初始化
    // 2.1处理params参数 a=100&b=200
    let str = "";
    for (let key in params) {
      str += `${key}=${params[key]}&`;
    }
    // 2.2 去掉末尾&符号
    // str = str.substr(0, str.length - 1);
    str = str.slice(0, -1);
    xhr.open(method, url + "?" + str);

    // 3 发送
    if (method === "POST" || method === "PUT" || method === "DELETE") {
      xhr.setRequestHeader("Content-type", "application/json");
      // 设置请求体 data是一个对象 需要转换为字符串
      xhr.send(JSON.stringify(data));
    } else {
      xhr.send();
    }

    // 设置响应体数据类型
    xhr.responseType = "json";
    // 4 事件绑定 处理服务端返回的结果
    // readyState是xhr对象的一个属性，有0 1 2 3 4这五个值
    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {
        if (xhr.status >= 200 && xhr.status < 300) {
          // 成功状态
          resolve({
            status: xhr.status,
            message: xhr.statusText,
            body: xhr.response,
          });
        } else {
          reject(new Error("请求失败，失败的状态码为" + xhr.status));
        }
      }
    };
  });
}

axios.get = function (url, options) {
  // 发送ajax get请求
  let config = Object.assign(options, { method: "GET", url: url }); //合并对象
  // console.log(config);
  return axios(config);
};

axios.post = function (url, options) {
  // 发送ajax post请求
  let config = Object.assign(options, { method: "POST", url: url }); //合并对象
  return axios(config);
};
axios.put = function (url, options) {
  // 发送ajax post请求
  let config = Object.assign(options, { method: "PUT", url: url }); //合并对象
  return axios(config);
};
axios.delete = function (url, options) {
  // 发送ajax post请求
  let config = Object.assign(options, { method: "DELETE", url: url }); //合并对象
  return axios(config);
};
